Análisis y Diseño de Algoritmos                                                                                                      

Prof: Ing. Victor Garro

Asistente: Marco Elizondo Vargas

 

MEMORIA ESTÁTICA

 

TEMA: Arreglos

 

Un arreglo es un conjunto de variables del mismo tipo que pueden ser referenciadas a través de un mismo nombre. La forma de identificar a un elemento determinado es a través de un índice.

La declaración

int Array[10];

instruye al compilador a que reserve una cantidad de memoria suficiente para almacenar 10 entidades enteras y referirse a esa memoria a traves del identificador Array. Dado que el número de elementos en un arreglo suele ser utilizado en distintos lugares de un programa, es buen estilo de programación el referenciarlo a través de una constante simbólica:

#define N 10
int Array[N];

Los elementos individuales del arreglo se comiena a numerar a partir del elemento 0, asi, Array[0] individualiza al primer elemento y Array[9] al último.

Los arreglos pueden ser multidimensionales, asi por ejemplo

double Matriz[10][20];

Define una region de memoria como para almacenar 200 reales en doble precisión. La forma en que se organizan en la memoria estos 200 elementos es la siguiente:

Matriz[0][0], Matriz[0][1], Matriz[0][2], ..., Matriz[1][0], Matriz[1][1],...,...,Matriz[9][19]

La inicialización de un arreglo puede realizarse a través de una lista, si la lista es mas corta que el numero de elementos en el arreglo, el resto de los elementos se inicializan a 0. Se puede obviar el tamaño de un arreglo al inicializarlo con una lista, el tamaño será el mismo que el de la lista en este caso. Ej:

 
    float a[5] = {0.1, 1.2, 2.3, 3.4, 4.5};
    double b[100] = {1.0};   /* los 99 restantes serán 0.0 */
    int a[] = {2, 3, -5, 7}; /* equivale a a[4]={2,3,-5,7} */
 

Ejemplo:

/*
         Utilización de arreglos.
         Programa que cuenta cuántas veces se repite cada dígito,
         cada carácter separador, y otros carácteres.
*/
#include <stdio.h>
#define ND 10
int main()
{
  int c, i, nWhite = 0, nOther = 0, nDigit[ND];
 
  for(i = 0; i < ND; i++)
    nDigit[i] = 0;
 
  while((c = getchar()) != EOF)
    if(c >= '0' && c <= '9')
      nDigit[c - '0']++;
    else
      if(c == ' ' || c == '\n' || c == '\t')
        nWhite++;
      else
        nOther++;
  for(i = 0; i < ND; i++)
    printf("Dígito %d: %d\n",i,nDigit[i]);
 
  printf("Caracteres separadores: %d\n",nWhite);
  printf("Otros caracteres: %d\n",nOther);
  return 0;
}

Puntos a Notar

  1. Declaración de un arreglo: int ndigit[10]. Declara un vector de 10 componentes del tipo entero. En C, todos los arreglos comienzan con el subíndice 0. Como índice, puede utilizarse una constante entera, una variable entera, o una expresión entera. Es importante notar que el lenguaje no realiza chequeos de rango, esto quiere decir que uno puede acceder y/o modificar componentes inexistentes del arreglo, referenciando componentes menores que 0, o mayores que el límite superior. Tener en cuenta que al empezar los índices a numerarse desde 0, un vector como el dado se referencia a través de índices que van desde el 0 al 9.
  2. Operaciones entre datos del tipo char y tipo int: Los char son convertidos a enteros.Por esta razón, c - '0' da el valor numérico del dígito.
  3. If anidados. Es la manera de implementar decisiones múltiples. Otra forma de realizar lo mismo esa través de bloque switch.

 

Free Web Hosting